/*
 * @Author: Dagon
 * @Date: 2021-03-08 16:57:07
 * @Description: 封装栈结构
 */

/**
 * 封装一个栈结构，实现一下操作
 *  1. push(element)：添加一个新元素到栈顶位置
 *  2. pop()： 移除栈顶的元素，同时返回被移除的元素
 *  3. peek()：返回栈顶的元素，不对栈做任何修改
 *  4. isEmpty()：如果栈为空就返回true，否则返回false
 *  5. size()：返回栈里的元素个数，和数组的length方法类似
 *  6. toString()：将栈结构的内容以字符串的形式返回
 */
 function Stack () {
  this.items = []

  // 1. push(element)：添加一个新元素到栈顶位置
  Stack.prototype.push = function (el) {
    this.items.push(el);
  }

  // 2. pop()： 移除栈顶的元素，同时返回被移除的元素
  Stack.prototype.pop = function () {
    return this.items.pop();
  }

  // 3. peek()：返回栈顶的元素，不对栈做任何修改
  Stack.prototype.peek = function () {
    return this.items[this.items.length - 1];
  }

  // 4. isEmpty()：如果栈为空就返回true，否则返回false
  Stack.prototype.isEmpty = function () {
    return this.items.length === 0;
  }
  // 5. size()：返回栈里的元素个数，和数组的length方法类似
  Stack.prototype.size = function () {
    return this.items.length;
  }
  // 6. toString()：将栈结构的内容以字符串的形式返回
  Stack.prototype.toString = function () {
    return this.items.join(' ')
  }
}

// const stack1 = new Stack()
// stack1.push(10)
// stack1.push(12)
// stack1.push(20)
// console.log(111, stack1.toString())
// console.log(222, stack1.isEmpty())

// 函数10进制转2进制
function decToBin (decNum) {
  const stack = new Stack()
  let str = ''
  while(decNum > 0) {
    stack.push(decNum % 2)
    decNum = Math.floor(decNum / 2)
  }

  while(!stack.isEmpty()) {
     str += stack.pop()
  }
  return str
}

console.log(decToBin(100))